#ifndef _CPARTICULAS_H
#define _CPARTICULAS_H

#include "textura.h"
#include <math.h>

#define MAX_PARTICULAS 10000
#define Z_DETRAS 	0.5
#define Z_0			0
#define Z_DELANTE	-0.5

/*---------------------------------
 Particles types
---------------------------------*/
typedef enum {
	PART_EXPLOSION,
	PART_FUEGO,
	PART_AURA
} ETipoParticulas;


/*---------------------------------
 Particle data struct
---------------------------------*/
typedef struct
{
	Bool  m_bActiva;
    float m_fVida;
    float m_fFade; 
    float m_fGravedadAcel;

	// Color
    float m_fR;  
    float m_fG;
    float m_fB;

	//Coordenadas
    float m_fX;      
    float m_fY;      
    float m_fZ;      

	// Vector de Movimiento/Direccion
    float m_fXd;     
    float m_fYd;     
    float m_fZd;
    
    // Vector de Movimiento/Direccion
    float m_fRot;
          
} TParticula;

/*------------------------------------------------------------------------------
	Implements a particle system
------------------------------------------------------------------------------*/
class CParticulas
{
    CTextura *m_pTextura;
	TParticula m_aParticulas[MAX_PARTICULAS];	
	ETipoParticulas m_eTipo;
	

	float m_fGlobalX;    
    float m_fGlobalY;    
    float m_fGlobalZ;
    float m_fGravedad;    
    float m_fAceleracionX;
    float m_fVidaInicial;	
    float m_fRadio;
    float m_aColor[3];
    float m_fEscala;
    int   m_iParticulasVivas;
    int   m_iNumParticulas;    
    Bool  m_bRotar;
    Bool  m_bVivo;    
	
public:

	CParticulas();
	~CParticulas();
	void Iniciar(int iNumParticulas,ETipoParticulas eTipo,float Vida=0,float Gravedad=0,float X=0,float Y=0,float Z=0);
	void Liberar();
	void ResetearParticula(int i);
	void Dibujar();
	void DibujarParticula(int i);
	Bool getVivo();

	/*---------------------------------
	 get Functions
	---------------------------------*/
	inline float getZ(){return m_fGlobalZ;}
	
	/*---------------------------------
	 set Functions
	---------------------------------*/
	inline void setEscala(float fEscala){m_fEscala=fEscala;}
	inline void setVivo(Bool bVivo){m_bVivo=bVivo;}
	inline void setX(float fX){m_fGlobalX=fX;}
	inline void setY(float fY){m_fGlobalY=fY;}
	inline void setZ(float fZ){m_fGlobalZ=fZ;}
	inline void setRotar(Bool bRotar){m_bRotar=bRotar;}
	inline void setColor(float R,float G,float B){m_aColor[0]=R;m_aColor[1]=G;m_aColor[2]=B;}
	inline void setVida(float fVida){m_fVidaInicial=fVida;}
	inline void setGravedad(float fGravedad){m_fGravedad=fGravedad;}
	inline void setTextura(CTextura *pTextura){m_pTextura=pTextura;}
	inline void setNumParticulas(int iNumParticulas){m_iNumParticulas=iNumParticulas;}
	inline void setRadio(float fRadio){m_fRadio=fRadio;}
	inline void setAceleracionX(float fAcelX){m_fAceleracionX=fAcelX;}
	
	
};

#endif
